#include "motorLimSensor.hpp"

motor_forelim* motor_forelim::p     = RT_NULL;
motor_forezero* motor_forezero::p   = RT_NULL;
motor_backlim* motor_backlim::p     = RT_NULL;
motor_backzero* motor_backzero::p   = RT_NULL;

/**
 * @brief 
 * @return motor_forelim& 
 */
motor_forelim& motor_forelim::instance()
{
    if(p==RT_NULL)
    {
        p = new motor_forelim(FORELIM_PIN, robot_devio::input);
        p->open();
    }
    return *p;
}

rt_sem_t motor_forelim::get_sem()
{
    return &irq_sem;
}


/**
 * @brief 
 * @return motor_forezero& 
 */
motor_forezero& motor_forezero::instance()
{
    if(p==RT_NULL)
    {
        p = new motor_forezero(FORELIM_PIN, robot_devio::input);
        p->open();
    }
    return *p;
}

rt_sem_t motor_forezero::get_sem()
{
    return &irq_sem;
}


/**
 * @brief 
 * @return motor_backlim& 
 */
motor_backlim& motor_backlim::instance()
{
    if(p==RT_NULL)
    {
        p = new motor_backlim(FORELIM_PIN, robot_devio::input);
        p->open();
    }
    return *p;
}

rt_sem_t motor_backlim::get_sem()
{
    return &irq_sem;
}


/**
 * @brief 
 * @return motor_backzero& 
 */
motor_backzero& motor_backzero::instance()
{
    if(p==RT_NULL)
    {
        p = new motor_backzero(FORELIM_PIN, robot_devio::input);
        p->open();
    }
    return *p;
}

rt_sem_t motor_backzero::get_sem()
{
    return &irq_sem;
}

